package com.gzx.qc.modular.asr.strategy.baidu.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;

/**
 * 百度语音转写响应DTO
 * <p>包含语音转写任务的整体响应信息，支持多任务并行处理</p>
 *
 * @author zjt
 * @version 1.0
 * @since 2025年07月29日11:11:13
 */
@Data
public class BaiduAsrTextRespDto {
    /**
     * 日志追踪ID（必填）
     */
    private long log_id;

    /**
     * 任务信息集合
     * <p>包含所有子任务的处理状态和结果</p>
     */
    private List<BaiduAsrTaskInfo> tasks_info;

    /**
     * 系统级错误码
     * <p>当请求整体失败时返回</p>
     */
    private Integer error_code;

    /**
     * 系统级错误描述
     */
    private String error_msg;

    /**
     * 错误任务ID列表
     * <p>记录所有处理失败的任务ID</p>
     */
    private List<String> error_info;

    /**
     * 单个任务信息实体
     */
    @Data
    public static class BaiduAsrTaskInfo {
        /**
         * 任务唯一标识（必填）
         */
        private String task_id;

        /**
         * 任务状态（必填）
         * <p>取值：RUNNING/SUCCESS/FAILURE</p>
         */
        private String task_status;

        /**
         * 任务处理结果
         * <p>根据状态包含不同数据结构</p>
         */
        private BaiduAsrTaskResult task_result;
    }

    /**
     * 任务结果详情
     */
    @Data
    public static class BaiduAsrTaskResult {
        /**
         * 左声道转写结果
         */
        private LeftResult left;

        /**
         * 右声道转写结果
         */
        private RightResult right;

        /**
         * 音频总时长（毫秒）
         */
        private Integer audio_duration;
    }

    /**
     * 声道转写结果基类
     */
    @Data
    public static abstract class ChannelResult {
        /**
         * 完整转写文本
         */
        private List<String> result;

        /**
         * 分段转写详情
         */
        private List<SegmentResult> detailed_result;

        /**
         * 日志追踪编号
         */
        private String corpus_no;

        /**
         * 声道级错误码
         */
        private Integer error_no;
    }

    /**
     * 左声道结果
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class LeftResult extends ChannelResult {
    }

    /**
     * 右声道结果
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class RightResult extends ChannelResult {
    }

    /**
     * 分段转写结果
     */
    @Data
    public static class SegmentResult {
        /**
         * 分段文本内容
         */
        private List<String> res;

        /**
         * 分段开始时间（毫秒）
         */
        private Integer begin_time;

        /**
         * 分段结束时间（毫秒）
         */
        private Integer end_time;

        /**
         * 字级时间戳信息
         */
        private List<WordInfo> words_info;

        /**
         * 分段序列号
         */
        private String sn;

        /**
         * 分段日志编号
         */
        private String corpus_no;
    }

    /**
     * 字级时间戳信息
     */
    @Data
    public static class WordInfo {
        /**
         * 单字内容
         */
        private String words;

        /**
         * 开始时间（毫秒）
         */
        private Integer begin_time;

        /**
         * 结束时间（毫秒）
         */
        private Integer end_time;
    }
}
